﻿Namespace Save
    ''' <summary>
    ''' ストレージクラス
    ''' </summary>
    ''' <remarks>
    ''' ダーティチェック用
    ''' #107 Storageクラスの見直し
    ''' </remarks>
    Public Class Storage
        Inherits ListArchive

        Public Sub New()
        End Sub

        Public Sub New(instance As Object)
            Me.Regist(instance)
        End Sub

#Region "Regist メソッド"
        ''' <summary>
        ''' インスタンスを登録します
        ''' </summary>
        ''' <param name="instance"></param>
        ''' <remarks></remarks>
        Public Sub Regist(instance As Object)
            If instance Is Nothing Then Throw New ArgumentNullException("instance")

            'アーカイブ登録
            If TypeOf instance Is ICollection Then
                Me.RegistCore(DirectCast(instance, ICollection))
            Else
                Me.RegistCore({instance})
            End If
        End Sub

        Public Sub Regist(instances As ICollection)
            If instances Is Nothing Then Throw New ArgumentNullException("instances")

            Me.RegistCore(DirectCast(instances, ICollection))
        End Sub

        ''' <summary>
        ''' インスタンスを登録します
        ''' </summary>
        ''' <param name="instance"></param>
        ''' <remarks></remarks>
        Private Sub RegistCore(instance As ICollection)
            '既存のものを廃棄します
            Me.TableArchives.Clear()

            'アーカイブ生成
            For Each item In CreateInstanceDictionary(instance)
                Me.TableArchives.Add(item.Key, TableArchiveFactory.Create(item.Value))
            Next
        End Sub
#End Region

    End Class

End Namespace
